<?php

class UserForm extends BaseUserForm {

    public function configure() {
        $this->disableLocalCSRFProtection();

        # Салбарууд
        $stores = array('' => '[Сонгох]') + StoreTable::getForSelect();
        $types = array('' => '[Сонгох]') + UserTable::getUserTypes();

        $this->setWidgets(array(
            'id' => new sfWidgetFormInputHidden(),
            'type' => new sfWidgetFormChoice(array('choices' => $types)),
            'store_id' => new sfWidgetFormChoice(array('choices' => $stores)),
            'username' => new sfWidgetFormInputText(),
            'pass' => new sfWidgetFormInputPassword(),
            'pass_confirm' => new sfWidgetFormInputPassword(),
            'firstname' => new sfWidgetFormInputText(),
            'lastname' => new sfWidgetFormInputText(),
        ));

        $validators = array();
        $validators['type'] = new sfValidatorChoice(array('choices' => array_keys($types)), array('required' => 'Та жагсаалтанд байгаа төрлүүдээс сонгоно уу', 'invalid' => 'Та жагсаалтанд байгаа салбаруудаас сонгоно уу'));
        $validators['store_id'] = new sfValidatorChoice(array('choices' => array_keys($stores)), array('required' => 'Та жагсаалтанд байгаа салбаруудаас сонгоно уу', 'invalid' => 'Та жагсаалтанд байгаа салбаруудаас сонгоно уу'));
        $validators['username'] = new sfValidatorString(array('required' => true, 'max_length' => 100, 'min_length' => 2), array('required' => 'Та нэвтрэх нэрийг оруулна уу', 'max_length' => 'Нэвтрэх нэр %max_length% тэмдэгтээс ихгүй байх ёстой', 'min_length' => 'Нэвтрэх нэр %min_length% тэмдэгтээс багагүй байх ёстой'));
        $validators['firstname'] = new sfValidatorString(array('required' => true, 'max_length' => 100, 'min_length' => 2), array('required' => 'Та ажилтны нэрийг оруулна уу', 'max_length' => 'Ажилтны нэр %max_length% тэмдэгтээс ихгүй байх ёстой', 'min_length' => 'Ажилтны нэр %min_length% тэмдэгтээс багагүй байх ёстой'));
        $validators['lastname'] = new sfValidatorString(array('required' => true, 'max_length' => 100, 'min_length' => 2), array('required' => 'Та ажилтны овгийг оруулна уу', 'max_length' => 'Ажилтны овог %max_length% тэмдэгтээс ихгүй байх ёстой', 'min_length' => 'Ажилтны овог %min_length% тэмдэгтээс багагүй байх ёстой'));
        $validators['pass'] = new sfValidatorPass();
        $validators['pass_confirm'] = new sfValidatorPass();

        $this->setValidators($validators);

        $this->getWidgetSchema()->setNameFormat('user[%s]');

        # Label
        $this->getWidget('type')->setLabel('Төрөл:');
        $this->getWidget('store_id')->setLabel('* Салбар:');
        $this->getWidget('username')->setLabel('* Нэвтрэх нэр:');
        $this->getWidget('pass')->setLabel('Нууц үг:');
        $this->getWidget('pass_confirm')->setLabel('Нууц үг (давтах):');
        $this->getWidget('firstname')->setLabel('* Нэр:');
        $this->getWidget('lastname')->setLabel('* Овог(эцгийн нэр):');

        # validation
        $this->validatorSchema->setPreValidator(
                new sfValidatorCallback(array('callback' => array($this, 'validateUsernameAndPassword')))
        );
        $this->validatorSchema->setOption('allow_extra_fields', true);
        $this->validatorSchema->setOption('filter_extra_fields', false);
    }

    public function validateUsernameAndPassword($validator, $values) {
        $curId = (int) $this->object->id;
        $username = $values['username'];
        $row = UserTable::retrieveByUsername($username);

        if ($row['id'] && $row['id'] != $curId) {
            $error = new sfValidatorError($validator, $username . ' нэвтрэх нэртэй хэрэглэгч өмнө нь бүртгэгдсэн байна.');
            throw new sfValidatorErrorSchema($validator, array('username' => $error));
        }

        $pass = $values['pass'];
        $passConfirm = $values['pass_confirm'];
        if ($pass != '' && $pass != $passConfirm) {
            $error = new sfValidatorError($validator, 'Нууц үг ба нууц үгийн давталт хоорондоо зөрж байна.');
            throw new sfValidatorErrorSchema($validator, array('pass' => $error));
        }

        if ($this->isNew()) {
            if ($pass == '') {
                $error = new sfValidatorError($validator, 'Нууц үг оруулна уу.');
                throw new sfValidatorErrorSchema($validator, array('pass' => $error));
            }
        }

        return $values;
    }

}
